::opts_knit$set(root.dir = rprojroot::find_rstudio_root_file()) knitr
In [1]:
In [2]:
library(tidyverse)
── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
✔ dplyr 1.1.4 ✔ readr 2.1.5
✔ forcats 1.0.0 ✔ stringr 1.5.1
✔ ggplot2 3.5.1 ✔ tibble 3.2.1
✔ lubridate 1.9.3 ✔ tidyr 1.3.1
✔ purrr 1.0.2
── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
✖ dplyr::filter() masks stats::filter()
✖ dplyr::lag() masks stats::lag()
ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
library(sf)
Linking to GEOS 3.12.1, GDAL 3.8.4, PROJ 9.3.1; sf_use_s2() is TRUE
library(arrow)
Adjuntando el paquete: 'arrow'
The following object is masked from 'package:lubridate':
duration
The following object is masked from 'package:utils':
timestamp
library(DBI)
library(duckdb)
library(dbplyr)
Adjuntando el paquete: 'dbplyr'
The following objects are masked from 'package:dplyr':
ident, sql
In [3]:
<- dbConnect(duckdb(), dbdir = "01_data/raw/covid.duckdb") con
Peru mother
In [4]:
data(Peru, package = "innovar")
<- Peru %>%
peru_mother as_tibble() %>%
select(dep, prov, distr, ubigeo) %>%
mutate(
# ubigeo_clasif = case_when(
# dep != "LIMA" ~ str_pad(
# str_sub(ubigeo, 1, 2),
# 6,
# side = "right",
# pad = "0"
# ),
# dep == "LIMA" ~ str_pad(
# str_sub(ubigeo, 1, 4),
# 6,
# side = "right",
# pad = "0"
# )
# ),
region = case_match(
dep,c("TUMBES", "PIURA", "LAMBAYEQUE", "LA LIBERTAD",
"ANCASH", "LIMA", "ICA", "AREQUIPA",
"MOQUEGUA", "TACNA", "CALLAO") ~ "Coast",
c("CAJAMARCA", "HUANUCO", "PASCO",
"JUNIN", "HUANCAVELICA", "AYACUCHO",
"APURIMAC", "CUSCO", "PUNO") ~ "Highlands",
c("AMAZONAS", "SAN MARTIN", "LORETO",
"UCAYALI", "MADRE DE DIOS") ~ "Jungle"
),# region_en = case_match(
# region,
# "Costa" ~ "Coast",
# "Sierra" ~ "Highlands",
# "Selva" ~ "Jungle",
# ),
macrorregion = case_when(
%in% c("TUMBES", "PIURA", "LAMBAYEQUE",
dep "CAJAMARCA", "LA LIBERTAD") ~ "North",
%in% c("AREQUIPA", "MOQUEGUA", "TACNA",
dep "CUSCO", "MADRE DE DIOS",
"APURIMAC", "PUNO") ~ "South",
%in% c("LORETO", "UCAYALI", "AMAZONAS",
dep "SAN MARTIN") ~ "East",
== "LIMA" & prov != "LIMA" ~ "Center",
dep %in% c("ANCASH", "JUNIN",
dep "PASCO", "HUANUCO",
"HUANCAVELICA", "AYACUCHO",
"ICA") ~ "Center",
== "LIMA" & prov == "LIMA" ~ "Metropolitan Lima and Callao",
dep == "CALLAO" ~ "Metropolitan Lima and Callao"
dep
)
) # add_case(
# dep = "LIMA",
# prov = "EN INVESTIGACIÓN",
# distr = "EN INVESTIGACIÓN",
# ubigeo_clasif = "151100",
# region = "Costa",
# macrorregion = "Centro"
# )
In [5]:
dbWriteTable(con, "peru_mother", peru_mother, overwrite = TRUE)
Quintil de Pobreza
In [6]:
<- readxl::read_excel("01_data/raw/2_Anexo Estadistico.xlsx",
pobreza skip = 3,
.name_repair = janitor::make_clean_names) %>%
drop_na() %>%
add_case(
ubigeo = "150906",
departamento = "LIMA",
provincia = "OYON",
distrito = "PACHANGARA",
intervalo_de_confianza_al_95_percent = "10.4",
x = "24.2"
%>%
) mutate(
ic_up = as.numeric(x),
ic_low = as.numeric(intervalo_de_confianza_al_95_percent),
estimate = rowMeans(pick(c(ic_up, ic_low)))
%>%
) select(ubigeo, poblacion_proyectada_2020_1, ic_up, ic_low, estimate)
In [7]:
# pobreza_quintil <- pobreza %>%
# reframe(
# quintil = quantile(estimate, probs = seq(0, 1, 0.25))
# )
<- pobreza %>%
pobreza left_join(peru_mother) %>%
rename(
departamento = dep,
provincia = prov,
distrito = distr
%>%
) mutate(
# quintil_cat = cut(estimate, breaks = pobreza_quintil$quintil,
# include.lowest = TRUE,
# labels = FALSE),
cuartil_pobreza = case_when(
>= 60 ~ 4,
estimate >= 40 ~ 3,
estimate >= 20 ~ 2,
estimate .default = 1
),across(
cuartil_pobreza,
factor
)%>%
) rename(estimate_pobreza = estimate) %>%
relocate(ubigeo, departamento:distrito)
In [8]:
dbWriteTable(con, "pobreza", pobreza, overwrite = TRUE)
Necesidades básicas insatisfechas (NBI)
In [9]:
<- readxl::read_excel("01_data/raw/POBLACIÓN CENSADA CON AL MENOS UNA NBI A NIVEL DISTRITAL 2017.xlsx",
nbi skip = 3,
.name_repair = janitor::make_clean_names) %>%
drop_na()
<- nbi %>%
nbi select(
ubigeo = x_2,
estimate_nbi = x_4
%>%
) mutate(
estimate_nbi = as.numeric(estimate_nbi),
cuartil_nbi = case_when(
>= 60 ~ 4,
estimate_nbi >= 40 ~ 3,
estimate_nbi >= 20 ~ 2,
estimate_nbi .default = 1
),cuartil_nbi = factor(cuartil_nbi)
)
<- nbi %>%
nbi left_join(
peru_mother%>%
) rename(
departamento = dep,
provincia = prov,
distrito = distr
)
In [10]:
dbWriteTable(con, "nbi", nbi, overwrite = TRUE)
Población 2020 - 2023
La información poblacional estimada se extrae de la plataforma REUNIS, que tiene un enlace de descarga: https://cloud.minsa.gob.pe/s/XJ3NoG3WsxgF6H8
En el año 2021, la información poblacional distrital no tiene subdivisión por sexo. Se utiliza el que figura en la plataforma nacional de datos abiertos.
In [11]:
<- readxl::read_excel(
pob2020 "01_data/raw/Poblacion-Reunis/Poblacion Peru 2020 Dpto Prov Dist Final INEI-actualizado.xlsx",
sheet = "Pob x Genero",
skip = 6,
.name_repair = janitor::make_clean_names
)
<- read_csv("01_data/raw/TB_POBLACION_INEI_2021.csv",
pob2021 name_repair = janitor::make_clean_names)
<- readxl::read_excel(
pob2022 "01_data/raw/Poblacion-Reunis/Poblacion Peru 2022 Dpto Prov Dist sexo - Final 14.03.22.xlsx",
sheet = "Pob x Genero",
skip = 6,
.name_repair = janitor::make_clean_names
)
<- readxl::read_excel(
pob2023 "01_data/raw/Poblacion-Reunis/Poblacion Peru 2023 Dpto Prov Dist sexo-15.03.23.xlsx",
sheet = "Pob x Genero",
skip = 6,
.name_repair = janitor::make_clean_names
)
Se extraerá únicamente la información asociada a las edades de 0 a 17 años de ambos sexos y se intenciona consolidarlo en una sola data.
In [12]:
<- pob2020 %>%
pob2020 select(ubigeo, departamento:distrito, x0:x17, x0_2:x17_2) %>%
slice(2:1876)
<- pob2021 %>%
pob2021 mutate(
anio = 2021,
edad = as.numeric(edad_anio),
sexo = factor(
sexo,levels = c("F", "M"),
labels = c("Female", "Male")
)%>%
) filter(edad < 18) %>%
select(-c(edad_anio, ubigeo_reniec)) %>%
rename(ubigeo = ubigeo_inei) %>%
relocate(anio, .before = ubigeo)
<- pob2022 %>%
pob2022 select(ubigeo, departamento:distrito, x0:x17, x0_2:x17_2) %>%
slice(2:1891)
<- pob2023 %>%
pob2023 select(ubigeo, departamento:distrito, x0:x17, x0_2:x17_2) %>%
slice(2:1891)
<- bind_rows(
pob
pob2020,
pob2022,
pob2023,.id = "anio"
%>%
) mutate(
anio = case_match(
anio, "1" ~ 2020,
"2" ~ 2022,
"3" ~ 2023
) )
Finalmente se ordena la información a fin de poder unificarla con la población 2021 y tener una base unificada llamada poblacion
.
In [13]:
<- pob %>%
pob pivot_longer(
cols = starts_with("x"),
names_to = "name",
values_to = "cantidad"
%>%
) mutate(
edad = as.numeric(str_extract(name, "\\d+")),
sexo = case_when(
str_detect(name, "_2") ~ "Female",
TRUE ~ "Male"
),sexo = factor(sexo,
levels = c("Female",
"Male")),
cantidad = if_else(is.na(cantidad), 0, cantidad)
%>%
) select(-name) %>%
relocate(sexo, .after = distrito)
<- bind_rows(pob,
poblacion %>%
pob2021) arrange(anio, ubigeo) %>%
mutate(
grupo_edad = case_when(
< 1 ~ "Under 1 year",
edad <= 5 ~ "1 - 5 years",
edad <= 11 ~ "6 - 11 years",
edad <= 17 ~ "12 - 17 years"
edad
),grupo_edad = factor(grupo_edad,
levels = c("Under 1 year",
"1 - 5 years",
"6 - 11 years",
"12 - 17 years")),
ubigeo = str_remove(ubigeo, "\\*"),
distrito = str_remove(distrito, "\\/1"),
distrito = str_squish(distrito)
)
<- poblacion %>%
poblacion select(-c(departamento:distrito)) %>%
inner_join(
%>%
peru_mother select(dep:ubigeo),
by = join_by(ubigeo)
%>%
) relocate(
anio, ubigeo,departamento = dep,
provincia = prov,
distrito = distr
%>%
) bind_rows(
%>%
poblacion anti_join(
%>%
peru_mother select(dep:ubigeo),
by = join_by(ubigeo)
) %>%
) arrange(anio, ubigeo)
<- peru_mother %>%
dep_ubigeo_clasif filter(dep != "LIMA") %>%
distinct(dep, region, macrorregion)
<- poblacion %>%
poblacion left_join(
dep_ubigeo_clasif,by = c("departamento" = "dep")
%>%
) mutate(
region = case_when(
== "LIMA" ~ "Coast",
departamento .default = region
),macrorregion = case_when(
== "LIMA" & provincia != "LIMA" ~ "Center",
departamento == "LIMA" & provincia == "LIMA" ~ "Metropolitan Lima and Callao",
departamento .default = macrorregion
)
)
<- poblacion %>%
poblacion left_join(
%>%
pobreza select(ubigeo, estimate_pobreza, cuartil_pobreza)
%>%
) left_join(
%>%
nbi select(ubigeo, estimate_nbi, cuartil_nbi)
)
Exportar datos
In [14]:
write_csv(poblacion,
"01_data/processed/poblacion.csv")
write_rds(poblacion,
"01_data/processed/poblacion.rds")
dbWriteTable(con, "poblacion", poblacion, overwrite = TRUE)
dbWriteTable(con, "dep_ubigeo_clasif", dep_ubigeo_clasif, overwrite = TRUE)
Fallecidos COVID-19
In [15]:
<- read_csv2("01_data/raw/fallecidos_covid.csv",
fallecidos name_repair = janitor::make_clean_names) %>%
mutate(
fecha_fallecimiento = ymd(fecha_fallecimiento),
anio = year(fecha_fallecimiento),
mes = month(fecha_fallecimiento),
fecha_round = ceiling_date(fecha_fallecimiento, unit = "month"),
.after = fecha_fallecimiento
)
Corrección de dato Sexo
In [16]:
<- fallecidos %>%
fallecidos_total filter(!is.na(ubigeo)) %>%
select(-c(departamento:distrito)) %>%
inner_join(
%>%
peru_mother select(dep:ubigeo)
%>%
) rename(
departamento = dep,
provincia = prov,
distrito = distr
%>%
) bind_rows(
%>%
fallecidos filter(is.na(ubigeo))
%>%
) # filter(edad_declarada < 18) %>%
mutate(
sexo = str_to_title(sexo),
sexo = factor(sexo,
levels = c("Femenino",
"Masculino"),
labels = c("Female",
"Male")),
grupo_edad = case_when(
< 1 ~ "Under 1 year",
edad_declarada <= 5 ~ "1 - 5 years",
edad_declarada <= 11 ~ "6 - 11 years",
edad_declarada <= 17 ~ "12 - 17 years"
edad_declarada
),grupo_edad = factor(grupo_edad,
levels = c("Under 1 year",
"1 - 5 years",
"6 - 11 years",
"12 - 17 years")),
ola_covid = case_when(
>= ymd("2020-03-01") &
fecha_fallecimiento <= ymd("2020-10-31") ~ "1 (Mar – Oct 2020)",
fecha_fallecimiento >= ymd("2020-11-01") &
fecha_fallecimiento <= ymd("2021-10-31") ~ "2 (Nov 2020 – Oct 2021)",
fecha_fallecimiento >= ymd("2021-11-01") &
fecha_fallecimiento <= ymd("2022-04-30") ~ "3 (Nov 2021 – Apr 2022)",
fecha_fallecimiento >= ymd("2022-05-01") &
fecha_fallecimiento <= ymd("2022-10-31") ~ "4 (May 2022 – Oct 2022)",
fecha_fallecimiento >= ymd("2022-11-01") ~ "5 (Nov 2022 – Jun 2023)",
fecha_fallecimiento .default = "Inicio"
),ola_covid = factor(ola_covid,
levels = c("1 (Mar – Oct 2020)",
"2 (Nov 2020 – Oct 2021)",
"3 (Nov 2021 – Apr 2022)",
"4 (May 2022 – Oct 2022)",
"5 (Nov 2022 – Jun 2023)"))
)
<- fallecidos_total %>%
fallecidos_total left_join(
dep_ubigeo_clasif,by = c("departamento" = "dep")
%>%
) mutate(
region = case_when(
== "LIMA" ~ "Coast",
departamento .default = region
),macrorregion = case_when(
== "LIMA" & provincia != "LIMA" ~ "Center",
departamento == "LIMA" & provincia == "LIMA" ~ "Metropolitan Lima and Callao",
departamento .default = macrorregion
)%>%
) left_join(
%>%
pobreza select(ubigeo, estimate_pobreza, cuartil_pobreza)
%>%
) left_join(
%>%
nbi select(ubigeo, estimate_nbi, cuartil_nbi)
)
In [17]:
dbWriteTable(con, "fallecidos_total", fallecidos_total, overwrite = TRUE)
Casos Positivos COVID-19
In [18]:
<- read_csv2("01_data/raw/positivos_covid.csv",
positivos name_repair = janitor::make_clean_names)
<- positivos %>%
positivos mutate(
fecha_resultado = ymd(fecha_resultado),
anio = year(fecha_resultado),
mes = month(fecha_resultado),
fecha_round = ceiling_date(fecha_resultado, unit = "month"),
.after = fecha_resultado
%>%
) mutate(
sexo = str_to_title(sexo),
sexo = factor(sexo,
levels = c("Femenino",
"Masculino"),
labels = c("Female",
"Male")),
grupo_edad = case_when(
< 1 ~ "Under 1 year",
edad <= 5 ~ "1 - 5 years",
edad <= 11 ~ "6 - 11 years",
edad <= 17 ~ "12 - 17 years"
edad
),grupo_edad = factor(grupo_edad,
levels = c("Under 1 year",
"1 - 5 years",
"6 - 11 years",
"12 - 17 years")),
ola_covid = case_when(
>= ymd("2020-03-01") &
fecha_resultado <= ymd("2020-10-31") ~ "1 (Mar – Oct 2020)",
fecha_resultado >= ymd("2020-11-01") &
fecha_resultado <= ymd("2021-10-31") ~ "2 (Nov 2020 – Oct 2021)",
fecha_resultado >= ymd("2021-11-01") &
fecha_resultado <= ymd("2022-04-30") ~ "3 (Nov 2021 – Apr 2022)",
fecha_resultado >= ymd("2022-05-01") &
fecha_resultado <= ymd("2022-10-31") ~ "4 (May 2022 – Oct 2022)",
fecha_resultado >= ymd("2022-11-01") ~ "5 (Nov 2022 – Jun 2023)",
fecha_resultado .default = "Inicio"
),ola_covid = factor(ola_covid,
levels = c("1 (Mar – Oct 2020)",
"2 (Nov 2020 – Oct 2021)",
"3 (Nov 2021 – Apr 2022)",
"4 (May 2022 – Oct 2022)",
"5 (Nov 2022 – Jun 2023)"))
%>%
) filter(anio <= 2023)
<- positivos %>%
positivos left_join(
dep_ubigeo_clasif,by = c("departamento" = "dep")
%>%
) mutate(
region = case_when(
== "LIMA" ~ "Coast",
departamento .default = region
),macrorregion = case_when(
== "LIMA" & provincia != "LIMA" ~ "Center",
departamento == "LIMA" & provincia == "LIMA" ~ "Metropolitan Lima and Callao",
departamento .default = macrorregion
)
)
<- positivos %>%
positivos left_join(
%>%
pobreza select(ubigeo, estimate_pobreza, cuartil_pobreza)
%>%
) left_join(
%>%
nbi select(ubigeo, estimate_nbi, cuartil_nbi)
)
In [19]:
<- read_csv2("01_data/raw/positivos_covid_040723.csv",
positivos_0723 name_repair = janitor::make_clean_names)
<- positivos_0723 %>%
positivos_0723 filter(!is.na(ubigeo)) %>%
select(-c(departamento:distrito)) %>%
left_join(
%>%
peru_mother select(dep:ubigeo)
%>%
) rename(
departamento = dep,
provincia = prov,
distrito = distr
%>%
) bind_rows(
%>%
positivos_0723 filter(is.na(ubigeo))
%>%
) mutate(
fecha_resultado = ymd(fecha_resultado),
anio = year(fecha_resultado),
mes = month(fecha_resultado),
fecha_round = ceiling_date(fecha_resultado, unit = "month"),
.after = fecha_resultado
%>%
) mutate(
sexo = str_to_title(sexo),
sexo = factor(sexo,
levels = c("Femenino",
"Masculino"),
labels = c("Female",
"Male")),
grupo_edad = case_when(
< 1 ~ "Under 1 year",
edad <= 5 ~ "1 - 5 years",
edad <= 11 ~ "6 - 11 years",
edad <= 17 ~ "12 - 17 years"
edad
),grupo_edad = factor(grupo_edad,
levels = c("Under 1 year",
"1 - 5 years",
"6 - 11 years",
"12 - 17 years")),
ola_covid = case_when(
>= ymd("2020-03-01") &
fecha_resultado <= ymd("2020-10-31") ~ "1 (Mar – Oct 2020)",
fecha_resultado >= ymd("2020-11-01") &
fecha_resultado <= ymd("2021-10-31") ~ "2 (Nov 2020 – Oct 2021)",
fecha_resultado >= ymd("2021-11-01") &
fecha_resultado <= ymd("2022-04-30") ~ "3 (Nov 2021 – Apr 2022)",
fecha_resultado >= ymd("2022-05-01") &
fecha_resultado <= ymd("2022-10-31") ~ "4 (May 2022 – Oct 2022)",
fecha_resultado >= ymd("2022-11-01") ~ "5 (Nov 2022 – Jun 2023)",
fecha_resultado .default = "Inicio"
),ola_covid = factor(ola_covid,
levels = c("1 (Mar – Oct 2020)",
"2 (Nov 2020 – Oct 2021)",
"3 (Nov 2021 – Apr 2022)",
"4 (May 2022 – Oct 2022)",
"5 (Nov 2022 – Jun 2023)"))
%>%
) arrange(id_persona, fecha_resultado)
In [20]:
library(data.table)
library(dtplyr)
setDTthreads(parallel::detectCores())
In [21]:
<- lazy_dt(positivos_0723)
positivos_0723_lazy
# Separar los registros con id_persona NA y asumir que todos son casos nuevos.
<- positivos_0723_lazy %>%
positivos_0723_na filter(is.na(id_persona), edad < 18, sexo != "No registrado", !is.na(fecha_resultado)) %>%
mutate(fecha_resultado_floor = floor_date(fecha_resultado, unit = "month")) %>%
as_tibble()
# Procesar los registros con id_persona válida.
<- positivos_0723_lazy %>%
positivos_0723_filtrados filter(!is.na(id_persona), edad < 18, sexo != "No registrado",
!is.na(fecha_resultado)) %>%
arrange(id_persona, fecha_resultado) %>%
group_by(id_persona) %>%
mutate(
dias_dif = fecha_resultado - lag(fecha_resultado),
caso_inicial = is.na(dias_dif),
duplicado = if_else(caso_inicial, FALSE, dias_dif <= 30),
caso_intermedio = if_else(caso_inicial, FALSE, dias_dif > 30 & dias_dif <= months(3)),
reinfeccion = if_else(caso_inicial, FALSE, dias_dif > months(3)),
fecha_resultado_floor = floor_date(fecha_resultado, unit = "month")
%>%
) ungroup() %>%
filter(caso_inicial | caso_intermedio | reinfeccion) %>%
select(-dias_dif) %>% # Limpiamos las columnas que no necesitamos más
as_tibble()
# Unir de nuevo los casos con NA en id_persona.
<- bind_rows(
positivos_0723_filtrados
positivos_0723_filtrados,
positivos_0723_na,%>%
positivos_0723 filter(is.na(fecha_resultado))
)
<- positivos_0723_filtrados %>%
positivos_0723_filtrados left_join(
dep_ubigeo_clasif,by = c("departamento" = "dep")
%>%
) mutate(
region = case_when(
== "LIMA" ~ "Coast",
departamento .default = region
),macrorregion = case_when(
== "LIMA" & provincia != "LIMA" ~ "Center",
departamento == "LIMA" & provincia == "LIMA" ~ "Metropolitan Lima and Callao",
departamento .default = macrorregion
)
)
<- positivos_0723_filtrados %>%
positivos_0723_filtrados left_join(
%>%
pobreza select(ubigeo, estimate_pobreza, cuartil_pobreza)
%>%
) left_join(
%>%
nbi select(ubigeo, estimate_nbi, cuartil_nbi)
)
# positivos_0723_filtrados_lazy <- lazy_dt(positivos_0723_filtrados)
#
# # Calcular la incidencia mensual con todos los casos incluidos.
# incidencia_mensual_0723 <- positivos_0723_filtrados_lazy %>%
# mutate(
# fecha_resultado_floor = floor_date(fecha_resultado, unit = "month")
# ) %>%
# group_by(fecha_resultado_floor) %>%
# summarise(
# casos = n() # Contabiliza todos los casos, incluyendo los asumidos como nuevos con id_persona NA
# ) %>%
# ungroup() %>%
# as_tibble()
In [22]:
dbWriteTable(con, "positivos", positivos, overwrite = TRUE)
dbWriteTable(con, "positivos_0723", positivos_0723_filtrados, overwrite = TRUE)
#dbWriteTable(con, "incidencia_mensual_0723", incidencia_mensual_0723, overwrite = TRUE)
In [23]:
<- tbl(con, "positivos_0723")
positivos_0723
<- positivos_0723 %>%
max_positivos_0723 summarise(max = max(fecha_resultado)) %>%
pull(max)
Warning: Missing values are always removed in SQL aggregation functions.
Use `na.rm = TRUE` to silence this warning
This warning is displayed once every 8 hours.
Vacunación
In [24]:
duckdb_read_csv(con,
"vacunas_pre",
"01_data/raw/vacunas_covid.csv",
lower.case.names = TRUE)
# dbSendQuery(
# con,
# "DROP VIEW IF EXISTS vacunas_pre"
# )
# dbRemoveTable(con, "vacunas_pre")
# dbSendQuery(con, "CREATE TABLE vacunas_pre AS SELECT * FROM vacunas")
In [25]:
# dbSendQuery(
# con,
# "DROP VIEW IF EXISTS vacunas"
# )
<- tbl(con, "vacunas_pre")
vacunas_pre <- tbl(con, "dep_ubigeo_clasif")
dep_ubigeo_clasif <- tbl(con, "pobreza")
pobreza <- tbl(con, "nbi") nbi
In [26]:
<- vacunas_pre %>%
vacunas mutate(
departamento = case_when(
is.na(departamento) ~ diresa,
.default = departamento
),across(
:distrito,
departamento~ str_replace(., "Ñ", "N")
),across(
:distrito,
departamento~ str_replace(., "-", " ")
),provincia = case_match(
provincia,"NAZCA" ~ "NASCA",
.default = provincia
),distrito = case_when(
== "NAZCA" ~ "NASCA",
distrito == "QUIMBIRI" ~ "KIMBIRI",
distrito == "CORONEL GREGORIO ALBARRACIN LANCHIP" ~ "CORONEL GREGORIO ALBARRACIN LANCHIPA",
distrito == "SAN JUAN DE YSCOS" ~ "SAN JUAN DE ISCOS",
distrito == "APURIMAC" & distrito == "HUAYLLO" ~ "IHUAYLLO",
departamento == "ANCASH" & provincia == "HUARAZ" & distrito == "PAMPAS" ~ "PAMPAS GRANDE",
departamento == "LIMA" & distrito == "AYAUCA" ~ "ALLAUCA",
departamento == "CAJAMARCA" & distrito == "SANTA CRUZ DE TOLEDO" ~ "SANTA CRUZ DE TOLED",
departamento == "AYACUCHO" & distrito == "HUAYA" ~ "HUALLA",
departamento == "HUANUCO" & distrito == "QUISQUI" ~ "QUISQUI (KICHKI)",
departamento == "HUANUCO" & distrito == "DANIEL ALOMIAS ROBLES" ~ "DANIEL ALOMIA ROBLES",
departamento == "AYACUCHO" & distrito == "HUAYA" ~ "HUALLA",
departamento == "TACNA" & distrito == "CHUCATAMANI" ~ "HEROES ALBARRACIN",
departamento == "LIMA" & provincia == "HUAROCHIRI" & distrito == "LARAOS" ~ "SAN PEDRO DE LARAOS",
departamento .default = distrito
),%>%
) left_join(
dep_ubigeo_clasif,by = c("departamento" = "dep")
%>%
) left_join(
%>%
pobreza select(departamento:distrito, estimate_pobreza, cuartil_pobreza)
%>%
) left_join(
%>%
nbi select(departamento:distrito, estimate_nbi, cuartil_nbi)
%>%
) mutate(
region = case_when(
== "LIMA" ~ "Coast",
departamento .default = region
),macrorregion = case_when(
== "LIMA" & provincia != "LIMA" ~ "Center",
departamento == "LIMA" & provincia == "LIMA" ~ "Metropolitan Lima and Callao",
departamento .default = macrorregion
)%>%
) to_arrow() %>%
mutate(
fecha_vacunacion = ymd(fecha_vacunacion),
anio = year(fecha_vacunacion),
mes = month(fecha_vacunacion),
fecha_round = ceiling_date(fecha_vacunacion, unit = "month"),
.after = fecha_vacunacion
%>%
) mutate(
edad = abs(edad),
grupo_edad = case_when(
< 1 ~ "Under 1 year",
edad <= 5 ~ "1 - 5 years",
edad <= 11 ~ "6 - 11 years",
edad <= 17 ~ "12 - 17 years"
edad
),anio = year(fecha_vacunacion),
ola_covid = case_when(
>= ymd("2020-03-01") &
fecha_vacunacion <= ymd("2020-10-31") ~ "1 (Mar – Oct 2020)",
fecha_vacunacion >= ymd("2020-11-01") &
fecha_vacunacion <= ymd("2021-10-31") ~ "2 (Nov 2020 – Oct 2021)",
fecha_vacunacion >= ymd("2021-11-01") &
fecha_vacunacion <= ymd("2022-04-30") ~ "3 (Nov 2021 – Apr 2022)",
fecha_vacunacion >= ymd("2022-05-01") &
fecha_vacunacion <= ymd("2022-10-31") ~ "4 (May 2022 – Oct 2022)",
fecha_vacunacion >= ymd("2022-11-01") ~ "5 (Nov 2022 – Jun 2023)",
fecha_vacunacion .default = "Inicio"
)%>%
) compute()
$sexo <- chunked_array(
vacunasfactor(
$sexo$as_vector(),
vacunaslevels = c("FEMENINO", "MASCULINO"),
labels = c("Female", "Male")
), type = dictionary(int8())
)
$grupo_edad <- chunked_array(
vacunasfactor(
$grupo_edad$as_vector(),
vacunaslevels = c("Under 1 year",
"1 - 5 years",
"6 - 11 years",
"12 - 17 years")
), type = dictionary(int8())
)
$ola_covid <- chunked_array(
vacunasfactor(
$ola_covid$as_vector(),
vacunaslevels = c("1 (Mar – Oct 2020)",
"2 (Nov 2020 – Oct 2021)",
"3 (Nov 2021 – Apr 2022)",
"4 (May 2022 – Oct 2022)",
"5 (Nov 2022 – Jun 2023)")
), type = dictionary(int8())
)
dbRemoveTable(con, "vacunas")
duckdb_register(
con,"vacunas",
vacunas
)
<- tbl(con, "vacunas")
vacunas
dbSendQuery(con, "CREATE TABLE vacunas AS SELECT * FROM vacunas")
In [27]:
dbRemoveTable(con, "vacunas_18")
<- tbl(con, "vacunas") vacunas
In [28]:
<- vacunas %>%
vacunas_18 filter(edad < 18,
<= max_positivos_0723) %>%
fecha_vacunacion compute(name = "vacunas_18", temporary = FALSE)
Hospitalizados
In [29]:
<- read_csv2("01_data/raw/TB_HOSP_VAC_FALLECIDOS.csv",
hospitalizados name_repair = janitor::make_clean_names)
# duckdb_read_csv(con,
# "hospitalizados",
# "01_data/raw/TB_HOSP_VAC_FALLECIDOS.csv",
# lower.case.names = TRUE,
# delim = ";")
<- hospitalizados %>%
hospitalizados mutate(
# sexo = case_when(
# sexo == "F" ~ "Femenino",
# sexo == "M" ~ "Masculino"
# ),
sexo = factor(
sexo,levels = c("F", "M"),
labels = c("Female", "Male")
),%>%
) mutate(
fecha_ingreso_hosp = dmy(fecha_ingreso_hosp),
anio = year(fecha_ingreso_hosp),
mes = month(fecha_ingreso_hosp),
fecha_round = ceiling_date(fecha_ingreso_hosp, unit = "month"),
.after = fecha_ingreso_hosp
)
In [30]:
dbWriteTable(con, "hospitalizados", hospitalizados, overwrite = TRUE)
In [31]:
<- tbl(con, "hospitalizados")
hospitalizados <- tbl(con, "vacunas")
vacunas <- tbl(con, "positivos_0723")
positivos_0723 <- tbl(con, "peru_mother")
peru_mother
<- hospitalizados %>%
hospitalizados select(-c(dep_domicilio:dist_domicilio)) %>%
rename(ubigeo = ubigeo_inei_domicilio) %>%
inner_join(
%>%
peru_mother select(dep:ubigeo),
by = join_by(ubigeo)
%>%
) rename(
departamento = dep,
provincia = prov,
distrito = distr,
%>%
) relocate(ubigeo, departamento:distrito)
<- hospitalizados %>%
hospitalizados left_join(
dep_ubigeo_clasif,by = c("departamento" = "dep")
%>%
) left_join(
%>%
pobreza select(ubigeo, estimate_pobreza, cuartil_pobreza)
%>%
) left_join(
%>%
nbi select(ubigeo, estimate_nbi, cuartil_nbi)
%>%
) mutate(
region = case_when(
== "LIMA" ~ "Coast",
departamento .default = region
),macrorregion = case_when(
== "LIMA" & provincia != "LIMA" ~ "Center",
departamento == "LIMA" & provincia == "LIMA" ~ "Metropolitan Lima and Callao",
departamento .default = macrorregion
)
)
<- vacunas %>%
vacunas_info_sex select(id_persona = uuid, sexo)
<- vacunas_info_sex %>%
vacunas_info_sex group_by(id_persona) %>%
add_count(sexo) %>%
ungroup() %>%
window_order(id_persona, desc(n)) %>%
distinct(id_persona, .keep_all = TRUE) %>%
select(-n)
<- positivos_0723 %>%
positivos_0723_info_sex select(id_persona, sexo)
<- positivos_0723_info_sex %>%
positivos_0723_info_sex group_by(id_persona) %>%
add_count(sexo) %>%
ungroup() %>%
window_order(id_persona, desc(n)) %>%
distinct(id_persona, .keep_all = TRUE) %>%
select(-n)
<- hospitalizados %>%
hospitalizados_fix_sexo1 filter(is.na(sexo)) %>%
select(-sexo) %>%
left_join(
vacunas_info_sex,by = join_by(id_persona)
%>%
) relocate(sexo, .after = id_persona)
# collect() %>%
# mutate(
# sexo = factor(
# sexo,
# levels = c("FEMENINO", "MASCULINO"),
# labels = c("Femenino", "Masculino")
# )
# ) %>%
# arrow::to_duckdb()
# Se intentó hacer lo mismo con los casos positivos, pero no se recuperó ninguna
# información
# hospitalizados_fix_sexo2 <- hospitalizados_fix_sexo1 %>%
# filter(is.na(sexo)) %>%
# select(-sexo) %>%
# left_join(
# positivos_0723_info_sex,
# by = join_by(id_persona)
# ) %>%
# relocate(sexo, .after = id_persona)
In [32]:
<- hospitalizados %>%
hosp1 filter(!is.na(sexo)) %>%
to_arrow() %>%
compute()
<- hospitalizados_fix_sexo1 %>%
hosp2 to_arrow() %>%
compute()
<- concat_tables(hosp1,
hosp_final
hosp2)
# hosp_final <- hospitalizados %>%
# filter(!is.na(sexo)) %>%
# union_all(
# hospitalizados_fix_sexo1
# )
<- hosp_final %>%
hosp_final mutate(
grupo_edad = case_when(
< 1 ~ "Under 1 year",
edad <= 5 ~ "1 - 5 years",
edad <= 11 ~ "6 - 11 years",
edad <= 17 ~ "12 - 17 years"
edad
),anio = year(fecha_ingreso_hosp),
ola_covid = case_when(
>= ymd("2020-03-01") &
fecha_ingreso_hosp <= ymd("2020-10-31") ~ "1 (Mar – Oct 2020)",
fecha_ingreso_hosp >= ymd("2020-11-01") &
fecha_ingreso_hosp <= ymd("2021-10-31") ~ "2 (Nov 2020 – Oct 2021)",
fecha_ingreso_hosp >= ymd("2021-11-01") &
fecha_ingreso_hosp <= ymd("2022-04-30") ~ "3 (Nov 2021 – Apr 2022)",
fecha_ingreso_hosp >= ymd("2022-05-01") &
fecha_ingreso_hosp <= ymd("2022-10-31") ~ "4 (May 2022 – Oct 2022)",
fecha_ingreso_hosp >= ymd("2022-11-01") ~ "5 (Nov 2022 – Jun 2023)",
fecha_ingreso_hosp .default = "Inicio"
)%>%
) compute()
$grupo_edad <- chunked_array(
hosp_finalfactor(
$grupo_edad$as_vector(),
hosp_finallevels = c("Under 1 year",
"1 - 5 years",
"6 - 11 years",
"12 - 17 years")
), type = dictionary(int8())
)
$ola_covid <- chunked_array(
hosp_finalfactor(
$ola_covid$as_vector(),
hosp_finallevels = c("1 (Mar – Oct 2020)",
"2 (Nov 2020 – Oct 2021)",
"3 (Nov 2021 – Apr 2022)",
"4 (May 2022 – Oct 2022)",
"5 (Nov 2022 – Jun 2023)")
), type = dictionary(int8())
)
dbRemoveTable(con, "hosp_final")
# dbSendQuery(
# con,
# "DROP VIEW IF EXISTS hosp_final"
# )
duckdb_register(
con,"hosp_final",
hosp_final
)
<- tbl(con, "hosp_final")
hosp_final
dbSendQuery(con, "CREATE TABLE hosp_final AS SELECT * FROM hosp_final")
In [33]:
# write_dataset(
# hosp_final,
# "01_data/processed/hosp_final",
# format = "parquet"
# )
#
# to_duckdb(
# hosp_final,
# con,
# "hosp_final"
# )
#
# dbSendQuery(con, "CREATE TABLE hosp_final AS SELECT * FROM hosp_final")
# dbWriteTable(con, "hospitalizados", hosp_final, overwrite = TRUE)
Persona
In [34]:
duckdb_read_csv(con,
"personas",
"01_data/raw/TB_PERSONA.csv",
lower.case.names = TRUE,
delim = ";")
In [35]:
<- tbl(con, "personas")
personas personas
# Source: table<personas> [?? x 6]
# Database: DuckDB v0.10.1 [brian@Windows 10 x64:R 4.4.0/D:\Github\covid-analisis-ninos\01_data\raw\covid.duckdb]
id_persona anho_nac sexo id_ubigeo_domicilio fecha_fallecido padron_reniec
<int> <int> <chr> <int> <chr> <int>
1 1437213 1950 F NA <NA> NA
2 1437254 1952 M 1575 <NA> 1
3 1437291 1963 M 1575 <NA> 1
4 1437315 1963 F 1575 <NA> 1
5 1437317 1966 F 695 <NA> 1
6 1437349 1944 F 1573 <NA> 1
7 1437351 1939 M 1573 <NA> 1
8 1437356 1974 M 1573 <NA> 1
9 1437357 1962 F 1573 <NA> 1
10 1437383 1966 F 1288 <NA> 1
# ℹ more rows
In [36]:
dbDisconnect(con, shutdown=TRUE)